package com.situ.stmall.admin.controller;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.ResponseBody;

import com.situ.stmall.admin.entity.APIResult;
import com.situ.stmall.admin.util.TokenUtil;
import com.situ.stmall.admin.util.TokenUtil.Token;
import com.situ.stmall.admin.util.VerCodeUtil;

@Controller
@CrossOrigin(origins = {"*"})
public class VercodeController {

	/**
	 * 返回一张图片 
	 * Token: 会话保持的技术， session，cookie 不能跨域
	 * 		实际上就是一个字符串，由服务器生成，交给客户端使用，
	 * 		通过加密的方式将登录用户的信息，保存在Token中，
	 * 		客户端再次进行请求时，可以带着Token请求，
	 * 		服务器从Token中解密登录用户信息，
	 * 优势：1、不需要将数据保存到内存中
	 * 		2、不受跨域请求的限制，前后端分离，分布式系统中，Token广泛应用在会话保持上
	 * 
	 * 可逆的加密算法
	 */
	@GetMapping("/vercode")
	@ResponseBody
	public APIResult vercode() {
		//1、随机生成字符串
		String vercode = VerCodeUtil.randomCode(4);
		
		//2、加密到Token中    JWT导包
		String strToken = TokenUtil.createToken(vercode);
		
		
		APIResult apiResult = new APIResult();
		apiResult.setStatus(200);
		apiResult.setMsg(strToken);
		
		return apiResult;
	}
	
	@GetMapping("/vercode/{token}") //路径参数
	public void vercode(@PathVariable("token") String strToken, HttpServletResponse response) {
		//解密
		Token token = TokenUtil.parseToken(strToken);
		
		String vercode = token.getCode();
		
		VerCodeUtil.createVerCode(response, vercode);
		
	}
	
}
